home *** CD-ROM | disk | FTP | other *** search
- |---------------B A T C H L R N H E L P S Y S T E M-----------------|
- |command: FOR..IN..DO (Actually multiple commands) |
- |use:FOR..IN..DO string is used to expand the power of a batch file |
- | or as an interactive (from the keyboard prompt) command |
- | |
- |how: In Batch processing type: FOR %%<c>IN<set>DO<command> |
- | In Interactive processing type: FOR %<c>IN<set>DO<command> |
- | |
- |explanation: The FOR command is similar to the "for..next loop" that |
- | programmers use to repeat a paricular action a number of times. A |
- | batch file to compare files on A:& B: drives looks like this: |
- | ECHO OFF [keeps command clutter of the screen] |
- | CLS [we always do this to get ECHO OFF removed] |
- | FOR %%Y IN (*.*) DO IF EXIST B:%%Y ECHO %%Y IS ON BOTH A:&B: |
- | | | |=the<command>(here, starting on A:drive,the |
- | | | DO sees if X {which is *.*[any of all the |
- | | | files on A:]} exists on B: the ECHOes the |
- | | | file name {X} as being on "BOTH A:&B:") |
- | | | |
- | | |=IN<set> the set is *.* or all the files on A:&B: |
- | | |
- | |=FOR is seeking the variable %X (it could be any letter) |
- | |
- | |
- |examples: FOR %%gf IN(*.ASM)DO MASM %%f; |
- | FOR %%f IN(BAK ART BUDGT) DO REM %%f |
- | The "%%" is needed so that after batch parameter (%0-%9) processing |
- | is complete, a % remains. If only %f was entered, the DOS batch pa- |
- | rameter processor sees the first "%", looks at "f", then decides |
- | that "%f" is a bad parameter reference, and discards the "%f". |
- | The FOR command would never receive this parameter. In a batch |
- | file, you must use the expression "%%". |
- | Let's see hoe the batch command works... The first line turns |
- | command displat off to clear command clutter. The second line clears|
- | the "echo off" messagefrom the screen. The third line is executed |
- | many times as there are files on the disk in a: [the set (*.*) |
- | assures this]. Each of those filenamesare assigned to %%Z in turn |
- | and then checked for presence on drive B: with the EXIST logical |
- | statement. If EXIST is true, then the message at the end of the IF |
- | subcommand si sent to the screen, otherwise nothing is printed and |
- | the next file on driove A: is assigned and checked. |
- | FILES on drive A: FILES on drive B: |
- | ----------------- ------------------ |
- | COMMAND.COM COMMAND.COM |
- | FILE.ONE FILE.ONE |
- | FILE.TWO FILE.LTR |
- | The batch subcommand we are investigating is: |
- | FOR %%Z IN (*.*) DO IF EXIST B:%%Z is on both A: and B: |
- | Each filename on A: is substitutedin the IF subcommand and then |
- | executed. To get the same effect you would have to type-- |
- | IF EXIST B:COMMAND.COM ECHO COMMAND.COM is on both A: and B: |
- | IF EXIST B:FILE.ONE ECHO FILE.ONE is on both A: and B: |
- | IF EXIST B:FILE.TWO ECHO FILE.TWO is on both A: and B: |
- | In the case of the example above, the first two would have a posi- |
- | tive responseand the last would not print anything. Study it care- |
- | fully before going on. |
- | FILES on drive A: FILES on drive B: |
- | ----------------- ----------------- |
- | COMMAND.COM COMMAND.COM |
- | FILE.ONE FILE.ONE |
- | FILE.TWO FILE.LTR |
- | OK, told you to studt the example. Let's see if you remember. What |
- | is the one line batch file command to find and report out all files |
- | starting with an "F" on drive A:? [I'll help you a little, you fill |
- | in the blanks.] |
- | ___%%Z IN (A:_____) ____ECHO File_____is on drive A: |
- | FOR %%Z IN (A:F*.*) DO ECHO File %%Z is on drive A: |
- | In this case you see that the A: disk is checked for any file start-|
- | ing with the letter "F" and that name is substituted in the varible |
- | %%Z. The appropriate message is then printed with the proper file- |
- | name. |
- | This is not an easy concept. Let's now look at using DOS commands |
- | in (Set). |
- | FOR...IN..DO using DOS Commands |
- | ================================ |
- | The set can contain DOS commands instead of filenames and these |
- | commands will then be executed in sequence (to include running |
- | large programes under the control of the FOR..IN..DO loop). |
- | Let's say you want to sequentially: Clear the screen |
- | Show the DOS version number |
- | then Show the disk directory with the pause on |
- | You could do all that in a one line batch file with the following |
- | command in it:: FOR %%T IN (CLS VER DIR/P) DO %%T |
- | When using DOS commands in (SET) ypu must use the space as a de- |
- | limiter and cannot have asterisk (*) or question mark (?) in any |
- | command. Use a colon(:) instead of a space when passing parameters |
- | to programs (i.e. DBASE:FILE INSTEAD OF DBASE FILE) |
- | It is possible to issue the FOR..IN..DO command at the DOS prompt |
- | by dropping one of the percentage signs (%) an the varible. |
- |----------------- T I M E M A S T E R ---------------------|